import com.example.bannerapi.model.BannerItem
import com.example.bilibili_fake.data.network.ApiClient
import com.example.bilibili_fake.data.network.BannerApi
import com.example.bilibili_fake.utils.LogUtil
import retrofit2.HttpException
import java.io.IOException
import kotlin.Result.Companion.success
import kotlin.random.Random

class BannerRepository {
    private val apiService: BannerApi = ApiClient.bannerApi

    suspend fun getBannerList(): Result<List<BannerItem>> {
        return try {
            
            // 直接使用retrofit的自动解析功能，而不是手动解析
            val response = apiService.getRecommendations(1, 4)
            LogUtil.d("BannerRepository", "Response received: ${response.code()}")
            
            if (response.isSuccessful && response.body()?.code == 0) {
                val bannerItems = response.body()?.data?.item ?: emptyList()
                LogUtil.d("BannerRepository", "成功获取到${bannerItems.size}个横幅项")
                success(bannerItems)
            } else {
                // 记录更详细的错误信息
                val errorCode = response.code()
                val errorMessage = response.message()
                
                // 获取错误响应体
                val errorBody = response.errorBody()?.let { body ->
                    try {
                        body.string()
                    } catch (e: Exception) {
                        "无法读取错误响应体: ${e.message}"
                    }
                } ?: "无错误响应体"
                
                LogUtil.e("BannerRepository", "HTTP错误: code=$errorCode, message=$errorMessage, body=$errorBody")
                
                // 当触发安全风控策略时，返回空列表而不是错误
                if (errorCode == 412) {
                    LogUtil.w("BannerRepository", "触发安全风控策略，返回空列表")
                    success(emptyList())
                } else {
                    success(emptyList())
                }
            }
        } catch (e: HttpException) {
            LogUtil.e("BannerRepository", "HTTP异常: ${e.message()}")
            LogUtil.e("BannerRepository", "HTTP异常响应体: ${e.response()?.errorBody()?.string()}")
            success(emptyList())
        } catch (e: IOException) {
            LogUtil.e("BannerRepository", "网络IO异常: ${e.message}")
            success(emptyList())
        } catch (e: Exception) {
            LogUtil.e("BannerRepository", "网络请求异常${e.message}")
            e.printStackTrace()
            // 检查是否是JSON解析错误
            if (e is com.google.gson.JsonSyntaxException || e is IllegalStateException) {
                LogUtil.e("BannerRepository", "JSON解析错误，可能是返回了非预期格式的数据")
                
                // 尝试获取原始响应内容进行调试
                try {
                    // 注意：这里我们不能直接访问原始响应，因为流可能已经被消费
                    LogUtil.e("BannerRepository", "请检查网络拦截器日志中的完整响应内容")
                } catch (inner: Exception) {
                    LogUtil.e("BannerRepository", "无法获取原始响应内容: ${inner.message}")
                }
            }
            success(emptyList()) // 即使出现异常也返回空列表，避免影响用户体验
        }
    }
}